package com.iuie.ns.system.beans;

import com.iuie.ns.frame.exception.ServiceException;
import com.iuie.ns.frame.utils.DateUtils;
import com.iuie.ns.frame.utils.StringUtils;

class ReportDayParams extends ReportParams {
	
	protected ReportDayParams(String statisticSize, String statisticRange, String startTime, String endTime) {
		this.endTime = endTime;
		this.startTime = startTime;
		this.statisticSize = statisticSize;
		this.statisticRange = statisticRange;
		this.range = Integer.parseInt(statisticRange);
	}

	@Override
	protected ReportParams init() {
		// 当 startTime is null，
		//     如果, endTime is null, 那么, mEndTime = currentTime
		//     如果, endTime is not null, 
		//         如果, endTime <= currentTime, 那么mEndTime = endTime
		//         如果, endTime > currentTime, 那么mEndTime = currentTime
		// 当startTime is not null
		//     如果startTime > currentTime, 那么抛出异常
		//     如果startTime < currentTime
		//         如果endTime is null, 那么, mEndTime = startTime add range, 
		//             如果mEndTime > currentTime, 那么mEndTime = currentTime, range = currentTime - startTime
		//             如果mEndTime <= currentTime, 无需处理
		//         如果endTime is not null,
		//             如果endTime >= currentTime, mEndTime = currentTime, range = currentTime - startTime
		//             如果endTime < currentTime, mEndTime = endTime, range = endTime - startTime
		
		final String currentTime = DateUtils.getCurrentDate();
		
		if (StringUtils.isBlank(this.startTime)) {
			if (StringUtils.isBlank(this.endTime) || (DateUtils.compareDate(this.endTime, currentTime) == 3)) {
				this.endTime = currentTime;
			} 
		} else {
			int cr = DateUtils.compareDate(this.startTime, currentTime);
			if (cr == 3 || cr == 2) {
				throw new ServiceException("开始时间须早于结束时间，或开始时间应早于今天【" + currentTime + "】");
			} else {
				if (StringUtils.isBlank(this.endTime)) {
					this.endTime = DateUtils.addDate(this.startTime, this.range);
				}
				int bt = DateUtils.compareDate(this.endTime, currentTime);
				if (bt == 3 || bt == 2) {
					this.endTime = currentTime;
				}
				this.range = DateUtils.getDaysTween(this.endTime, this.startTime);
			}
		}
		this.startTime = DateUtils.addDate(this.endTime, -(this.range - 1));
		
		this.compute();
		return this;
	}

	private void compute() {
		// range 须大于0
		if (this.range <= 0) {
			throw new ServiceException("开始时间须早于结束时间，或开始时间应早于今天【" + DateUtils.getCurrentDate() + "】");
		}
		if (this.range > 60) {
			throw new ServiceException("按日统计只能统计60天以内的数据！");
		}
		
		// 往回倒数 statisticsRange 天
		for (int i = this.range - 1; i >= 0; i--) {
			String date = DateUtils.addDate(this.endTime, -i); // 用于数据库查询的date
			String day = DateUtils.formatDate(date, "yyyy-MM-dd", "MM月dd日"); // 用于显示的标签
			
			this.queryParams.add(date);
			this.categories.add(day);
		}
	}

}
